home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 3: CDPD 3 / Almathera Ten on Ten - Disc 3: CDPD3.iso / fish / 676-700 / 681 / term / source.lha / SpeechPanel.c < prev    next >
C/C++ Source or Header  |  1992-05-09  |  11KB  |  381 lines

  1. /*
  2. **    $Id: SpeechPanel.c,v 1.5 92/04/21 16:59:44 olsen Sta Locker: olsen $
  3. **    $Revision: 1.5 $
  4. **    $Date: 92/04/21 16:59:44 $
  5. **
  6. **    Editing panel for speech configuration
  7. **
  8. **    Copyright © 1990-1992 by Olaf `Olsen' Barthel & MXM
  9. **        All Rights Reserved
  10. */
  11.  
  12. #include "termGlobal.h"
  13.  
  14. #define WIDTH    464
  15. #define HEIGHT    112
  16.  
  17.     /* Some layout assistance. */
  18.  
  19. #define GADGET_WIDTH    88
  20. #define GADGET_COUNT    4
  21. #define GADGET_SPACE    (GADGET_WIDTH + ((WIDTH - 20) - (GADGET_COUNT * GADGET_WIDTH)) / (GADGET_COUNT - 1))
  22.  
  23. enum    {    GAD_RATE,GAD_PITCH,GAD_FREQUENCY,GAD_VOLUME,
  24.         GAD_SEX,GAD_SPEECH,GAD_SPEAK,
  25.         GAD_USE,GAD_LOAD,GAD_SAVE,GAD_CANCEL };
  26.  
  27. STATIC UBYTE *Sex[3] =
  28. {
  29.     NULL,
  30.     NULL,
  31.     NULL
  32. };
  33.  
  34. STATIC struct Gadget *
  35. CreateAllGadgets(struct SpeechConfig *SpeechConfig,struct Gadget **GadgetArray,struct Gadget **GadgetList,APTR VisualInfo,UWORD TopEdge)
  36. {
  37.     struct Gadget        *Gadget;
  38.     struct NewGadget     NewGadget;
  39.     LONG             Counter = 0;
  40.  
  41.     LocalizeString(Sex,MSG_SPEECHPANEL_MALE_TXT,MSG_SPEECHPANEL_FEMALE_TXT);
  42.  
  43.     memset(&NewGadget,0,sizeof(struct NewGadget));
  44.  
  45.     if(Gadget = CreateContext(GadgetList))
  46.     {
  47.         extern APTR LocaleBase;
  48.  
  49.         NewGadget . ng_Width        = 252;
  50.         NewGadget . ng_Height        = 10;
  51.         NewGadget . ng_GadgetText    = LocaleString(MSG_SPEECHPANEL_RATE_GAD);
  52.         NewGadget . ng_TextAttr        = &DefaultFont;
  53.         NewGadget . ng_VisualInfo    = VisualInfo;
  54.         NewGadget . ng_GadgetID        = Counter;
  55.         NewGadget . ng_LeftEdge        = (GadToolsLongestString(MSG_SPEECHPANEL_RATE_GAD,MSG_SPEECHPANEL_SPEECH_ENABLED_GAD) + 2) * 8 + 1;
  56.         NewGadget . ng_TopEdge        = 1 + TopEdge;
  57.  
  58.         GadgetArray[Counter++] = Gadget = CreateGadget(SLIDER_KIND,Gadget,&NewGadget,
  59.             GT_Underscore,        '_',
  60.             GTSL_Min,        MINRATE,
  61.             GTSL_Max,        MAXRATE,
  62.             GTSL_Level,        SpeechConfig -> Rate,
  63.             GTSL_LevelFormat,    "%3ld",
  64.             GTSL_MaxLevelLen,    3,
  65.         TAG_DONE);
  66.  
  67.         NewGadget . ng_GadgetText    = LocaleString(MSG_SPEECHPANEL_PITCH_GAD);
  68.         NewGadget . ng_GadgetID        = Counter;
  69.         NewGadget . ng_TopEdge        = NewGadget . ng_TopEdge + NewGadget . ng_Height + 1;
  70.  
  71.         GadgetArray[Counter++] = Gadget = CreateGadget(SLIDER_KIND,Gadget,&NewGadget,
  72.             GT_Underscore,        '_',
  73.             GTSL_Min,        MINPITCH,
  74.             GTSL_Max,        MAXPITCH,
  75.             GTSL_Level,        SpeechConfig -> Pitch,
  76.             GTSL_LevelFormat,    "%3ld",
  77.             GTSL_MaxLevelLen,    3,
  78.         TAG_DONE);
  79.  
  80.         NewGadget . ng_GadgetText    = LocaleString(MSG_SPEECHPANEL_FREQUENCY_GAD);
  81.         NewGadget . ng_GadgetID        = Counter;
  82.         NewGadget . ng_TopEdge        = NewGadget . ng_TopEdge + NewGadget . ng_Height + 1;
  83.  
  84.         GadgetArray[Counter++] = Gadget = CreateGadget(SLIDER_KIND,Gadget,&NewGadget,
  85.             GT_Underscore,        '_',
  86.             GTSL_Min,        MINFREQ,
  87.             GTSL_Max,        MAXFREQ,
  88.             GTSL_Level,        SpeechConfig -> Frequency,
  89.             GTSL_LevelFormat,    LocaleBase ? "%6lD" : "%6ld",
  90.             GTSL_MaxLevelLen,    6,
  91.         TAG_DONE);
  92.  
  93.         NewGadget . ng_GadgetText    = LocaleString(MSG_SPEECHPANEL_VOLUME_GAD);
  94.         NewGadget . ng_GadgetID        = Counter;
  95.         NewGadget . ng_TopEdge        = NewGadget . ng_TopEdge + NewGadget . ng_Height + 1;
  96.  
  97.         GadgetArray[Counter++] = Gadget = CreateGadget(SLIDER_KIND,Gadget,&NewGadget,
  98.             GT_Underscore,        '_',
  99.             GTSL_Min,        MINVOL,
  100.             GTSL_Max,        MAXVOL,
  101.             GTSL_Level,        SpeechConfig -> Volume,
  102.             GTSL_LevelFormat,    "%2ld",
  103.             GTSL_MaxLevelLen,    2,
  104.         TAG_DONE);
  105.  
  106.         NewGadget . ng_GadgetText    = LocaleString(MSG_SPEECHPANEL_SEX_GAD);
  107.         NewGadget . ng_GadgetID        = Counter;
  108.         NewGadget . ng_TopEdge        = NewGadget . ng_TopEdge + NewGadget . ng_Height + 1;
  109.         NewGadget . ng_Height        = 12;
  110.  
  111.         GadgetArray[Counter++] = Gadget = CreateGadget(CYCLE_KIND,Gadget,&NewGadget,
  112.             GT_Underscore,        '_',
  113.             GTCY_Labels,        Sex,
  114.             GTCY_Active,        SpeechConfig -> Sex,
  115.         TAG_DONE);
  116.  
  117.         NewGadget . ng_GadgetText    = LocaleString(MSG_SPEECHPANEL_SPEECH_ENABLED_GAD);
  118.         NewGadget . ng_GadgetID        = Counter;
  119.         NewGadget . ng_TopEdge        = NewGadget . ng_TopEdge + NewGadget . ng_Height + 1;
  120.         NewGadget . ng_Width        = 26;
  121.         NewGadget . ng_Height        = 11;
  122.  
  123.         GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
  124.             GT_Underscore,        '_',
  125.             GTCB_Checked,        SpeechConfig -> Enabled,
  126.         TAG_DONE);
  127.  
  128.         NewGadget . ng_GadgetText    = LocaleString(MSG_SPEECHPANEL_SPEAK_GAD);
  129.         NewGadget . ng_GadgetID        = Counter;
  130.         NewGadget . ng_LeftEdge        = 10;
  131.         NewGadget . ng_Width        = WIDTH - 20;
  132.         NewGadget . ng_TopEdge        = NewGadget . ng_TopEdge + NewGadget . ng_Height + 1;
  133.         NewGadget . ng_Height        = 12;
  134.  
  135.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  136.             GT_Underscore,        '_',
  137.             GA_Disabled,        SpeechConfig -> Enabled == FALSE,
  138.         TAG_DONE);
  139.  
  140.         NewGadget . ng_Width        = 88;
  141.         NewGadget . ng_Height        = 12;
  142.         NewGadget . ng_GadgetText    = LocaleString(MSG_GLOBAL_USE_GAD);
  143.         NewGadget . ng_GadgetID        = Counter;
  144.         NewGadget . ng_Flags        = 0;
  145.         NewGadget . ng_LeftEdge        = 10;
  146.         NewGadget . ng_TopEdge        = HEIGHT - 3 - NewGadget . ng_Height;
  147.  
  148.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  149.             GT_Underscore,    '_',
  150.         TAG_DONE);
  151.  
  152.         NewGadget . ng_GadgetText    = LocaleString(MSG_GLOBAL_LOAD_GAD);
  153.         NewGadget . ng_GadgetID        = Counter;
  154.         NewGadget . ng_LeftEdge        = NewGadget . ng_LeftEdge + GADGET_SPACE;
  155.  
  156.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  157.             GT_Underscore,    '_',
  158.         TAG_DONE);
  159.  
  160.         NewGadget . ng_GadgetText    = LocaleString(MSG_GLOBAL_SAVE_GAD);
  161.         NewGadget . ng_GadgetID        = Counter;
  162.         NewGadget . ng_LeftEdge        = NewGadget . ng_LeftEdge + GADGET_SPACE;
  163.  
  164.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  165.             GT_Underscore,    '_',
  166.         TAG_DONE);
  167.  
  168.         NewGadget . ng_GadgetText    = LocaleString(MSG_GLOBAL_CANCEL_GAD);
  169.         NewGadget . ng_GadgetID        = Counter;
  170.         NewGadget . ng_LeftEdge        = NewGadget . ng_LeftEdge + GADGET_SPACE;
  171.  
  172.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  173.             GT_Underscore,    '_',
  174.         TAG_DONE);
  175.     }
  176.  
  177.     return(Gadget);
  178. }
  179.  
  180. VOID
  181. SpeechPanel()
  182. {
  183.     struct Window        *PanelWindow;
  184.     struct Gadget        *GadgetList = NULL;
  185.     struct Gadget        *GadgetArray[GAD_CANCEL + 1];
  186.     struct SpeechConfig     PrivateConfig;
  187.     UBYTE              DummyBuffer[256],*DummyChar;
  188.     struct FileRequest    *FileRequest;
  189.  
  190.     CopyMem(&SpeechConfig,&PrivateConfig,sizeof(struct SpeechConfig));
  191.  
  192.     if(CreateAllGadgets(&SpeechConfig,&GadgetArray[0],&GadgetList,VisualInfo,Screen -> WBorTop + Screen -> Font -> ta_YSize + 1))
  193.     {
  194.         if(PanelWindow = OpenWindowTags(NULL,
  195.             WA_Left,    (Screen -> Width - WIDTH) >> 1,
  196.             WA_Top,        (Screen -> Height - HEIGHT) >> 1,
  197.             WA_Width,    WIDTH,
  198.             WA_Height,    HEIGHT,
  199.  
  200.             WA_Activate,    TRUE,
  201.             WA_DragBar,    TRUE,
  202.             WA_DepthGadget,    TRUE,
  203.             WA_RMBTrap,    TRUE,
  204.             WA_DepthGadget,    TRUE,
  205.             WA_CloseGadget,    TRUE,
  206.             WA_CustomScreen,Screen,
  207.  
  208.             WA_IDCMP,    IDCMP_CLOSEWINDOW | IDCMP_VANILLAKEY | SLIDERIDCMP | CHECKBOXIDCMP | BUTTONIDCMP | CYCLEIDCMP,
  209.  
  210.             WA_Title,    LocaleString(MSG_SPEECHPANEL_SPEECH_PREFERENCES_TXT),
  211.         TAG_DONE))
  212.         {
  213.             struct IntuiMessage    *Massage;
  214.             ULONG             Class,Code;
  215.             struct Gadget        *Gadget;
  216.             BYTE             Terminated = FALSE;
  217.  
  218.             PushWindow(PanelWindow);
  219.  
  220.             AddGList(PanelWindow,GadgetList,(UWORD)-1,(UWORD)-1,NULL);
  221.             RefreshGList(GadgetList,PanelWindow,NULL,(UWORD)-1);
  222.             GT_RefreshWindow(PanelWindow,NULL);
  223.  
  224.             while(!Terminated)
  225.             {
  226.                 WaitPort(PanelWindow -> UserPort);
  227.  
  228.                 while(!Terminated && (Massage = (struct IntuiMessage *)GT_GetIMsg(PanelWindow -> UserPort)))
  229.                 {
  230.                     Class    = Massage -> Class;
  231.                     Code    = Massage -> Code;
  232.                     Gadget    = (struct Gadget *)Massage -> IAddress;
  233.  
  234.                     GT_ReplyIMsg(Massage);
  235.  
  236.                     if(Class == IDCMP_VANILLAKEY)
  237.                         KeySelect(GadgetArray,GAD_CANCEL,Code,PanelWindow,&Gadget,&Class,&Code);
  238.  
  239.                     if(Class == IDCMP_CLOSEWINDOW)
  240.                         Terminated = TRUE;
  241.  
  242.                     if(Class == IDCMP_MOUSEMOVE)
  243.                     {
  244.                         switch(Gadget -> GadgetID)
  245.                         {
  246.                             case GAD_RATE:        SpeechConfig . Rate = Code;
  247.                                         break;
  248.  
  249.                             case GAD_PITCH:        SpeechConfig . Pitch = Code;
  250.                                         break;
  251.  
  252.                             case GAD_FREQUENCY:    SpeechConfig . Frequency = Code;
  253.                                         break;
  254.  
  255.                             case GAD_VOLUME:    SpeechConfig . Volume = Code;
  256.                                         break;
  257.                         }
  258.                     }
  259.  
  260.                     if(Class == IDCMP_GADGETUP)
  261.                     {
  262.                         BYTE OldEnglish = English;
  263.  
  264.                         switch(Gadget -> GadgetID)
  265.                         {
  266.                             case GAD_USE:        Terminated = TRUE;
  267.                                         break;
  268.  
  269.                             case GAD_CANCEL:    Terminated = TRUE;
  270.                                         CopyMem(&PrivateConfig,&SpeechConfig,sizeof(struct SpeechConfig));
  271.                                         SpeechSetup();
  272.                                         break;
  273.  
  274.                             case GAD_SEX:        SpeechConfig . Sex = Code;
  275.                                         break;
  276.  
  277.                             case GAD_SPEECH:    SpeechConfig . Enabled = GT_CHECKED(Gadget);
  278.  
  279.                                         GT_SetGadgetAttrs(GadgetArray[GAD_SPEAK],PanelWindow,NULL,
  280.                                             GA_Disabled,    SpeechConfig . Enabled == FALSE,
  281.                                         TAG_DONE);
  282.  
  283.                                         break;
  284.  
  285.                             case GAD_LOAD:        strcpy(DummyBuffer,LastSpeech);
  286.  
  287.                                         DummyChar = PathPart(DummyBuffer);
  288.  
  289.                                         *DummyChar = 0;
  290.  
  291.                                         BlockWindow(PanelWindow);
  292.  
  293.                                         if(FileRequest = GetFile(LocaleString(MSG_SPEECHPANEL_LOAD_SPEECH_SETTINGS_TXT),DummyBuffer,FilePart(LastSpeech),DummyBuffer,"term#?",FALSE,FALSE,FALSE,LocaleString(MSG_GLOBAL_LOAD_TXT)))
  294.                                         {
  295.                                             if(!ReadIFFData(DummyBuffer,&SpeechConfig,sizeof(struct SpeechConfig),'SPEK'))
  296.                                                 MyEasyRequest(Window,LocaleString(MSG_SPEECHPANEL_COULD_NOT_LOAD_SPEECH_SETTINGS_TXT),LocaleString(MSG_GLOBAL_CONTINUE_TXT),DummyBuffer);
  297.                                             else
  298.                                             {
  299.                                                 strcpy(LastSpeech,DummyBuffer);
  300.  
  301.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_RATE],PanelWindow,NULL,
  302.                                                     GTSL_Level,SpeechConfig . Rate,
  303.                                                 TAG_DONE);
  304.  
  305.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_PITCH],PanelWindow,NULL,
  306.                                                     GTSL_Level,SpeechConfig . Pitch,
  307.                                                 TAG_DONE);
  308.  
  309.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_FREQUENCY],PanelWindow,NULL,
  310.                                                     GTSL_Level,SpeechConfig . Frequency,
  311.                                                 TAG_DONE);
  312.  
  313.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_VOLUME],PanelWindow,NULL,
  314.                                                     GTSL_Level,SpeechConfig . Volume,
  315.                                                 TAG_DONE);
  316.  
  317.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_SEX],PanelWindow,NULL,
  318.                                                     GTCY_Active,SpeechConfig . Sex,
  319.                                                 TAG_DONE);
  320.  
  321.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_SPEECH],PanelWindow,NULL,
  322.                                                     GTCB_Checked,SpeechConfig . Enabled,
  323.                                                 TAG_DONE);
  324.  
  325.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_SPEAK],PanelWindow,NULL,
  326.                                                     GA_Disabled,    SpeechConfig . Enabled == FALSE,
  327.                                                 TAG_DONE);
  328.  
  329.                                                 SpeechSetup();
  330.                                             }
  331.                                         }
  332.  
  333.                                         ReleaseWindow(PanelWindow);
  334.  
  335.                                         break;
  336.  
  337.                             case GAD_SAVE:        strcpy(DummyBuffer,LastSpeech);
  338.  
  339.                                         DummyChar = PathPart(DummyBuffer);
  340.  
  341.                                         *DummyChar = 0;
  342.  
  343.                                         BlockWindow(PanelWindow);
  344.  
  345.                                         if(FileRequest = GetFile(LocaleString(MSG_SPEECHPANEL_SAVE_SPEECH_SETTINGS_TXT),DummyBuffer,FilePart(LastSpeech),DummyBuffer,"term#?",TRUE,FALSE,FALSE,LocaleString(MSG_GLOBAL_SAVE_TXT)))
  346.                                         {
  347.                                             if(!WriteIFFData(DummyBuffer,&SpeechConfig,sizeof(struct SpeechConfig),'SPEK'))
  348.                                                 MyEasyRequest(Window,LocaleString(MSG_SPEECHPANEL_COULD_NOT_SAVE_SPEECH_SETTINGS_TXT),LocaleString(MSG_GLOBAL_CONTINUE_TXT),DummyBuffer);
  349.                                             else
  350.                                                 strcpy(LastSpeech,DummyBuffer);
  351.                                         }
  352.  
  353.                                         ReleaseWindow(PanelWindow);
  354.  
  355.                                         break;
  356.  
  357.                             case GAD_SPEAK:        SpeechSetup();
  358.  
  359.                                         English = TRUE;
  360.  
  361.                                         Say(LocaleString(MSG_SPEECHPANEL_THIS_IS_TERM_SPEAKING_TXT));
  362.  
  363.                                         English = OldEnglish;
  364.  
  365.                                         break;
  366.                         }
  367.                     }
  368.                 }
  369.             }
  370.  
  371.             RemoveGList(PanelWindow,GadgetList,(UWORD)-1);
  372.  
  373.             PopWindow();
  374.  
  375.             CloseWindow(PanelWindow);
  376.         }
  377.     }
  378.  
  379.     FreeGadgets(GadgetList);
  380. }
  381.